package IHM;

import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import Metier.Theme;

/**
 * Classe permettant l'affichage du choix des themes personnalisé
 * @author Aubry Thomas
 * @author Bouchet Sylvain
 * @author Fauvel Alexis
 * @author Lessieur Jocelyn
 * @author Mathias Bastien 
 * @author Teuf Antoine
 * @version 1.0
 */
public class FenetrePersoTheme extends JDialog implements ChangeListener,ActionListener{

	/**
	 * JPanel permetant l'aperçu du theme
	 */
	private JPanel preview;
	
	/**
	 * Bouton Annuler et valider
	 */
	private JButton ann,val;
	
	/**
	 * JColorChooser permetant la selection des couleurs du theme
	 */
	private JColorChooser jcc;
	
	/**
	 * JLabel pour l'affichage de l'aperçu titre, sous titre, paragraphe, lien
	 */
	private JLabel titrePage,titre1,titre2,sstitre1,sstitre2,par1,par2,lien1,lien2;
	
	/**
	 * Barre d'outils de l'application
	 */
	private ToolBar toolBar;
	
	/**
	 * groupe des boutons radio
	 */
	private CheckboxGroup cbg;
	
	/**
	 * bouton radio pour le fond, le titre, les sous titres, les paragraphes, les liens
	 */
	private Checkbox cb_fond,cb_titrePage,cb_titre,cb_sousTitre,cb_paragraphe,cb_lien;
	
	/**
	 * Couleur des elements (theme, titre, sous titre, paragraphe, lien)
	 */
	private Color coul_fond,coul_titrePage,coul_titre,coul_sousTitre,coul_paragraphe,coul_lien;
	
	/**
	 * Constructeur de la classe FenetrePersoTheme
	 * @param tbt	la tool bar a la quel est associé le bouton du choix
	 */
	public FenetrePersoTheme(ToolBar tbt){
		toolBar=tbt;
		setTitle("Personnalisation Du Thème");
		setLocationRelativeTo(null);
		setSize(650,350);
		setLayout(new BorderLayout());
		setModal(true);
		
		JPanel haut= new JPanel(new BorderLayout());
		
		/************************/
		/* centre du panel haut */
		/************************/
		Font font_titrePage=new Font("Arial",Font.PLAIN,22);
		Font font_titre=new Font("Arial",Font.PLAIN,20);
		Font font_sousTitre=new Font("Arial",Font.PLAIN,18);
		Font font_paragraphe=new Font("Arial",Font.PLAIN,15);
		Font font_lien=new Font("Arial",Font.PLAIN,15);
		
		preview = new JPanel(new GridLayout(9, 1));
		
		titrePage=new JLabel("TitrePage",JLabel.CENTER);
		titrePage.setFont(font_titre);
		preview.add(titrePage);
		
		titre1=new JLabel("Titre 1",JLabel.LEFT);
		titre1.setFont(font_titre);
		preview.add(titre1);
		
		sstitre1=new JLabel("    Sous-Titre 1",JLabel.LEFT);
		sstitre1.setFont(font_sousTitre);
		preview.add(sstitre1);
		
		par1=new JLabel("        Paragraphe 1",JLabel.LEFT);
		par1.setFont(font_paragraphe);
		preview.add(par1);
		
		lien1=new JLabel("        Lien 1",JLabel.LEFT);
		lien1.setFont(font_lien);
		preview.add(lien1);
		
		titre2=new JLabel("Titre 2",JLabel.LEFT);
		titre2.setFont(font_titre);
		preview.add(titre2);
		
		sstitre2=new JLabel("    Sous-Titre 2",JLabel.LEFT);
		sstitre2.setFont(font_sousTitre);
		preview.add(sstitre2);
		
		par2=new JLabel("        Paragraphe 2",JLabel.LEFT);
		par2.setFont(font_paragraphe);
		preview.add(par2);
		
		lien2=new JLabel("        Lien 2",JLabel.LEFT);
		lien2.setFont(font_lien);
		preview.add(lien2);
		
		haut.add(preview,"Center");
		
		/************************/
		/* gauche du panel haut */
		/************************/
		JPanel panHG=new JPanel(new BorderLayout());
		
		//pannel de checkbox en gridlayout en haut a gauche
		JPanel panHGcbg=new JPanel();
		cbg=new CheckboxGroup();
		panHGcbg.add(cb_fond=new Checkbox("Fond",cbg,true));
		panHGcbg.add(cb_titrePage=new Checkbox("TitrePage",cbg,false));
		panHGcbg.add(cb_titre=new Checkbox("Titre",cbg,false));
		panHGcbg.add(cb_sousTitre=new Checkbox("Sous Titre",cbg,false));
		panHGcbg.add(cb_paragraphe=new Checkbox("Paragraphe",cbg,false));
		panHGcbg.add(cb_lien=new Checkbox("Lien",cbg,false));
		panHG.add(panHGcbg,"North");
		
		//bouton modifier en bas a gauche du panel haut
		jcc=new JColorChooser();
		jcc.getSelectionModel().addChangeListener(this);
		jcc.setPreviewPanel(new JPanel());
		panHG.add(jcc);
		haut.add(panHG,"West");
		add(haut);
		
		
		/****************/
		/* Panel du bas */
		/****************/
		
		JPanel bas= new JPanel();
		
		ann=new JButton("Annuler");
		ann.addActionListener(this);
		val=new JButton("Valider");
		val.addActionListener(this);
		bas.add(val);
		bas.add(ann);
		
		add(bas,"South");
		
		
		preview.setBackground(tbt.getTheme().getFond());
		titrePage.setForeground(tbt.getTheme().getTitrePage());
		titre1.setForeground(tbt.getTheme().getTitre());
		titre2.setForeground(tbt.getTheme().getTitre());
		sstitre1.setForeground(tbt.getTheme().getSousTitre());
		sstitre2.setForeground(tbt.getTheme().getSousTitre());
		par1.setForeground(tbt.getTheme().getParagraphe());
		par2.setForeground(tbt.getTheme().getParagraphe());
		lien1.setForeground(tbt.getTheme().getLien());
		lien2.setForeground(tbt.getTheme().getLien());
		
		//initialisation des couleurs
		coul_fond=tbt.getTheme().getFond();
		coul_titrePage=tbt.getTheme().getTitrePage();
		coul_titre=tbt.getTheme().getTitre();
		coul_sousTitre=tbt.getTheme().getSousTitre();
		coul_paragraphe=tbt.getTheme().getParagraphe();
		coul_lien=tbt.getTheme().getLien();
		
		
		setVisible(true);				
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==val){
			toolBar.getIhm().getControleur().getProjetEnCours().setTheme(new Theme("ThemePerso", coul_fond,coul_titrePage,coul_titre, coul_sousTitre, coul_paragraphe,coul_lien));
			toolBar.majThemeActuel();
			toolBar.getIhm().majVisu();
			dispose();
		}
		else if(e.getSource()==ann){
			dispose();
		}
	}
	@Override
	public void stateChanged(ChangeEvent e) {
		// TODO Auto-generated method stub
		if(cbg.getSelectedCheckbox()==cb_fond){	
			coul_fond=jcc.getColor();
			preview.setBackground(coul_fond);
		}
		else if(cbg.getSelectedCheckbox()==cb_titrePage){
			coul_titrePage=jcc.getColor();
			titrePage.setForeground(coul_titrePage);
		}
		else if(cbg.getSelectedCheckbox()==cb_titre){
			coul_titre=jcc.getColor();
			titre1.setForeground(coul_titre);
			titre2.setForeground(coul_titre);
		}
		else if(cbg.getSelectedCheckbox()==cb_sousTitre){
			coul_sousTitre=jcc.getColor();
			sstitre1.setForeground(coul_sousTitre);
			sstitre2.setForeground(coul_sousTitre);
		}
		else if(cbg.getSelectedCheckbox()==cb_paragraphe){
			coul_paragraphe=jcc.getColor();
			par1.setForeground(coul_paragraphe);
			par2.setForeground(coul_paragraphe);
		}
		else if(cbg.getSelectedCheckbox()==cb_lien){
			coul_lien=jcc.getColor();
			lien1.setForeground(coul_lien);
			lien2.setForeground(coul_lien);
		}
	}

}
